package zzs.generalframework.console.core.user.usercontact.service.impl;

import java.util.ArrayList;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import zzs.generalframework.common.core.user.usercontact.UserContactBO;
import zzs.generalframework.common.core.user.usercontact.UserContactInfo;
import zzs.generalframework.common.core.user.usercontact.UserContactPO;
import zzs.generalframework.console.common.exception.ConsoleException;
import zzs.generalframework.console.common.exception.ConsoleRollbackException;
import zzs.generalframework.console.common.model.ConsoleReturnBO;
import zzs.generalframework.console.common.model.ConsoleReturnBO.ConsoleResult;
import zzs.generalframework.console.core.user.usercontact.dao.IUserContactDao;
import zzs.generalframework.console.core.user.usercontact.service.IUserContactService;
import zzs.generalframework.util.core.reflect.BeanUtils;

/**
 * @title
 * @description
 * @project zzs-console
 * @package zzs.generalframework.console.core.user.usercontact.service.impl
 * @author zzs
 * @date 2018年2月5日
 * @version 1.0
 */
@Service("zzs.generalframework.console.core.user.usercontact.service.impl.userContactServiceImpl")
public class UserContactServiceImpl implements IUserContactService
{

	private Logger logger = LoggerFactory.getLogger(UserContactServiceImpl.class);
	@Autowired
	BeanUtils beanUtils;
	@Autowired
	IUserContactDao userContactDao;

	@Override
	public ConsoleReturnBO saveUserContact(UserContactBO userContactBO)
	{
		logger.debug("====保存用户联系方式信息开始====");
		logger.debug("====保存用户联系方式信息.入参:UserContactBO=[{}]====", userContactBO);
		ConsoleReturnBO returnConsoleReturnBO = new ConsoleReturnBO();
		UserContactPO userContactPO = new UserContactPO();
		copyUserContactBO2UserContactPO(userContactBO, userContactPO);
		Boolean insertResult = userContactDao.insert(userContactPO);
		if (insertResult)
		{
			returnConsoleReturnBO.setResult(ConsoleResult.SUCCESS);
		}
		logger.debug("====保存用户联系方式信息.出参:ConsoleReturnBO=[{}]====", returnConsoleReturnBO);
		logger.info("====保存用户联系方式信息结束====");
		return returnConsoleReturnBO;
	}

	@Override
	public ConsoleReturnBO saveUserContact(List<UserContactBO> userContactBOList) throws ConsoleException
	{
		logger.info("====保存用户联系方式信息列表开始====");
		logger.debug("====保存用户联系方式信息列表.入参:UserContactBOList=[{}]====", userContactBOList);
		ConsoleReturnBO returnConsoleReturnBO = new ConsoleReturnBO();
		returnConsoleReturnBO.setResult(ConsoleResult.SUCCESS);
		for (UserContactBO itemBO : userContactBOList)
		{
			ConsoleReturnBO itemResult = saveUserContact(itemBO);
			if (ConsoleResult.FAILD.equals(itemResult.getResult()))
			{
				returnConsoleReturnBO.setResult(ConsoleResult.FAILD);
				returnConsoleReturnBO.setMessage(itemResult.getMessage());
				throw new ConsoleRollbackException(itemResult.getMessage());
			}
		}
		logger.debug("====保存用户联系方式信息列表.出参:ConsoleReturnBO=[{}]====", returnConsoleReturnBO);
		logger.info("====保存用户联系方式信息列表结束====");
		return returnConsoleReturnBO;
	}

	@Override
	public ConsoleReturnBO getUserContact(UserContactInfo userContactInfo)
	{
		logger.info("====获取用户联系方式信息开始====");
		logger.debug("====获取用户联系方式信息.入参:UserContactInfo=[{}]====", userContactInfo);
		ConsoleReturnBO returnConsoleReturnBO = new ConsoleReturnBO();
		List<UserContactPO> userContactPOList = userContactDao.select(userContactInfo);
		if (userContactPOList == null || userContactPOList.size() == 0)
		{
			returnConsoleReturnBO.setMessage("未获取到记录");
		}
		else if (userContactPOList.size() == 1)
		{
			returnConsoleReturnBO.setResult(ConsoleResult.SUCCESS);
			UserContactBO userContactBO = new UserContactBO();
			copyUserContactPO2UserContactBO(userContactPOList.get(0), userContactBO);
			returnConsoleReturnBO.setReturnObj(userContactBO);
		}
		else
		{
			returnConsoleReturnBO.setMessage("记录不唯一");
			UserContactBO userContactBO = new UserContactBO();
			copyUserContactPO2UserContactBO(userContactPOList.get(0), userContactBO);
			returnConsoleReturnBO.setReturnObj(userContactBO);
		}
		logger.debug("====获取用户联系方式信息.出参:ConsoleReturnBO=[{}]====", returnConsoleReturnBO);
		logger.info("====获取用户联系方式信息结束====");
		return returnConsoleReturnBO;
	}

	@Override
	public ConsoleReturnBO listUserContact(UserContactInfo userContactInfo)
	{
		logger.info("====获取用户联系方式信息列表开始====");
		logger.debug("====获取用户联系方式信息列表.入参:UserContactInfo=[{}]====", userContactInfo);
		ConsoleReturnBO returnConsoleReturnBO = new ConsoleReturnBO();
		List<UserContactPO> userContactPOList = userContactDao.select(userContactInfo);
		if (userContactPOList == null || userContactPOList.size() == 0)
		{
			returnConsoleReturnBO.setMessage("未获取到记录");
		}
		else
		{
			returnConsoleReturnBO.setResult(ConsoleResult.SUCCESS);
			List<UserContactBO> resultList = new ArrayList<UserContactBO>();
			for (UserContactPO itemPO : userContactPOList)
			{
				UserContactBO itemBO = new UserContactBO();
				copyUserContactPO2UserContactBO(itemPO, itemBO);
				resultList.add(itemBO);
			}
			returnConsoleReturnBO.setReturnObj(resultList);
		}
		logger.debug("====获取用户联系方式信息列表.出参:ConsoleReturnBO＝[{}]====", returnConsoleReturnBO);
		logger.info("====获取用户联系方式信息列表结束====");
		return returnConsoleReturnBO;
	}

	@Override
	public ConsoleReturnBO updateUserContact(UserContactBO userContactBO)
	{
		logger.info("====更新用户联系方式信息开始====");
		logger.debug("====更新用户联系方式信息.入参:UserContactBO=[{}]====", userContactBO);
		ConsoleReturnBO returnConsoleReturnBO = new ConsoleReturnBO();
		UserContactPO userContactPO = new UserContactPO();
		copyUserContactBO2UserContactPO(userContactBO, userContactPO);
		Boolean updateResult = userContactDao.update(userContactPO);
		if (updateResult)
		{
			returnConsoleReturnBO.setResult(ConsoleResult.SUCCESS);
		}
		logger.debug("====更新用户联系方式信息.出参:ConsoleReturnBO=[{}]====", returnConsoleReturnBO);
		logger.info("====更新用户联系方式信息结束====");
		return returnConsoleReturnBO;
	}

	@Override
	public ConsoleReturnBO updateUserContact(List<UserContactBO> userContactBOList) throws ConsoleException
	{
		logger.info("====更新用户联系方式信息列表开始====");
		logger.debug("====更新用户联系方式信息列表.入参:List<UserContactBO>=[{}]====", userContactBOList);
		ConsoleReturnBO returnConsoleReturnBO = new ConsoleReturnBO();
		returnConsoleReturnBO.setResult(ConsoleResult.SUCCESS);
		for (UserContactBO itemBO : userContactBOList)
		{
			ConsoleReturnBO itemResult = updateUserContact(itemBO);
			if (ConsoleResult.FAILD.equals(itemResult.getResult()))
			{
				returnConsoleReturnBO.setResult(ConsoleResult.FAILD);
				returnConsoleReturnBO.setMessage(itemResult.getMessage());
				throw new ConsoleRollbackException(itemResult.getMessage());
			}
		}
		logger.debug("====更新用户联系方式信息列表.出参:ConsoleReturnBO=[{}]====", returnConsoleReturnBO);
		logger.info("====更新用户联系方式信息列表结束====");
		return returnConsoleReturnBO;
	}

	@Override
	public ConsoleReturnBO removeUserContact(UserContactBO userContactBO)
	{
		logger.info("====删除用户联系方式信息开始====");
		logger.debug("====删除用户联系方式信息.入参:UserContactBO＝[{}]======", userContactBO);
		ConsoleReturnBO returnConsoleReturnBO = new ConsoleReturnBO();
		UserContactPO userContactPO = new UserContactPO();
		copyUserContactBO2UserContactPO(userContactBO, userContactPO);
		Boolean deleteResult = userContactDao.delete(userContactPO);
		if (deleteResult)
		{
			returnConsoleReturnBO.setResult(ConsoleResult.SUCCESS);
		}
		logger.debug("====删除用户联系方式信息.出参:ConsoleReturnBO=[{}]====", returnConsoleReturnBO);
		logger.info("====删除用户联系方式信息结束====");
		return returnConsoleReturnBO;
	}

	@Override
	public ConsoleReturnBO removeUserContact(List<UserContactBO> userContactBOList) throws ConsoleException
	{
		logger.info("====删除用户联系方式信息列表开始====");
		logger.debug("====删除用户联系方式信息列表.入参:List<UserContactBO>＝[{}]======", userContactBOList);
		ConsoleReturnBO returnConsoleReturnBO = new ConsoleReturnBO();
		returnConsoleReturnBO.setResult(ConsoleResult.SUCCESS);
		for (UserContactBO itemBO : userContactBOList)
		{
			ConsoleReturnBO itemResult = removeUserContact(itemBO);
			if (ConsoleResult.FAILD.equals(itemResult.getResult()))
			{
				returnConsoleReturnBO.setResult(ConsoleResult.FAILD);
				returnConsoleReturnBO.setMessage(itemResult.getMessage());
				throw new ConsoleRollbackException(itemResult.getMessage());
			}
		}
		logger.debug("====删除用户联系方式信息列表.出参:ConsoleReturnBO＝[{}]====", returnConsoleReturnBO);
		logger.info("====删除用户联系方式信息列表结束====");
		return returnConsoleReturnBO;
	}

	@Override
	public Long countUserContact(UserContactBO userContactBO)
	{
		logger.info("====统计用户联系方式信息开始====");
		logger.debug("====统计用户联系方式信息。入参：UserContactBO＝[{}]======", userContactBO);
		Long returnLong = new Long(0);
		UserContactPO userContactPO = new UserContactPO();
		copyUserContactBO2UserContactPO(userContactBO, userContactPO);
		returnLong = userContactDao.count(userContactPO);
		logger.debug("====统计用户联系方式信息.出参:Long＝[{}]======", returnLong);
		logger.info("====统计用户联系方式信息结束====");
		return returnLong;
	}

	private void copyUserContactBO2UserContactPO(UserContactBO userContactBO, UserContactPO userContactPO)
	{
		beanUtils.copyBeanNotNull(userContactBO, userContactPO);
		if (userContactBO.getSysID() != null)
		{
			userContactPO.setSeqID(userContactBO.getSysID());
		}
	}

	private void copyUserContactPO2UserContactBO(UserContactPO userContactPO, UserContactBO userContactBO)
	{
		beanUtils.copyBeanNotNull(userContactPO, userContactBO);
		if (userContactPO.getSeqID() != null)
		{
			userContactBO.setSysID(userContactPO.getSeqID());
		}
	}

}
